package com.pachong.android.framework.httprequest.responsecallbacks;


import android.content.Context;
import android.support.annotation.NonNull;

import com.pachong.android.framework.httprequest.IResponseDataParser;
import com.pachong.android.framework.httprequest.ResponseParser;

/**
 * 最基础的callback，只有成功和失败两个状态
 *
 * 子类可以继承这个扩展出不同的状态。
 *
 * @param <T>
 */
public abstract class RequestListener<T> {

    private IResponseDataParser<T> mDataParser;

    @Deprecated
    public RequestListener(@NonNull Class<T> clazz) {
        mDataParser = new ResponseParser<T>(clazz);
    }

    public RequestListener(@NonNull IResponseDataParser dataParser) {
        mDataParser = dataParser;
    }

    public abstract void onSuccess(T t);

    public abstract void onStart(Context context, String url);

    public abstract void onFailure(Throwable t, int errorNo, String strMsg);

    /**
     * 处理原始的failure数据，用户可以修改这个方法来自定义fail数据的处理
     * 注意：最后需要回调onFailure
     *
     * @param t
     * @param errorNo
     * @param errorMsg
     */
    public abstract void onDeliverFailureResponse(Throwable t, int errorNo, String errorMsg);// {


    /**
     * 服务器异常,如 404，505等
     *
     * @return void
     */
    public void onServiceError(int code){}

    /**
     * 网络异常
     *
     * @throw
     * @return void
     */
    public void  onNetworkError(){}

    /**
     * 数据解析异常
     *
     * @param e
     * @throw
     * @return void
     */
    public void onDataParseError(Exception e){}


    public IResponseDataParser<T> getResponseDataParser() {
        return mDataParser;
    }
}
